package com.xbk.seckill.order.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.xbk.seckill.common.config.JdbcConfig;
import com.xbk.seckill.common.config.MyBatisConfig;
import com.xbk.seckill.common.config.RedisConfig;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * Spring事务编程配置类
 *
 * @author xiexu
 * @date 2025/1/10 21:21
 */
// 标注该类为配置类，Spring容器会处理该类中的@Bean注解方法，用来定义Spring的Bean
@Configuration
// 扫描指定的包路径，寻找MyBatis的Mapper接口，并自动注册为Spring Bean，便于依赖注入
@MapperScan(value = {"com.xbk.seckill.order.infrastructure.mapper"})
// 扫描指定的包路径，寻找Spring管理的Bean，并注册到Spring容器中
@ComponentScan(value = {"com.xbk.seckill", "com.alibaba.cola"})
// 导入额外的配置类，这里导入了 JdbcConfig、RedisConfig、MyBatisConfig 类，意味着这些类中定义的Bean也会被Spring容器管理
@Import({RedisConfig.class})
// 启用Spring注解驱动的事务管理，设置proxyTargetClass为true表示使用CGLIB代理类而非JDK动态代理（即基于接口的代理）
@EnableTransactionManagement(proxyTargetClass = true)
// 扫描指定包路径下的Servlet组件（如Filter、Listener、Servlet），并将它们自动注册到Spring容器中
@ServletComponentScan(basePackages = {"com.xbk.seckill"})
public class TransactionConfig {

}
